package org.gvp.common.constant;

import org.gvp.common.http.Page;
import org.gvp.common.http.Result;

import java.util.List;

/**
 * <li>全局控制层接口,此接口指定所有的方法细节都在服务层处理,此接口只作为请求映射</li>
 * <ul>
 *     <li>增加数据方法前缀: add </li>
 *     <li>删除数据方法前缀: delete </li>
 *     <li>修改数据方法前缀: update </li>
 *     <li>查找数据方法前缀: query </li>
 *     <li>请求列表数据方法前缀: queryList </li>
 *     <li>请求分页数据方法前缀: queryPage </li>
 * </ul>
 * @param <T> 数据库实体类数据类型
 * @author gvp
 * @since 2024-02-25 20:09
 * @version 1.2
 */
public interface BaseController<T> {
    /**
     * [ 默认实现 ]
     * 添加一条数据信息
     */
    default Result<Integer> add(T pojo){
        return null;
    }
    /**
     * [ 默认实现 ]
     * 添加一条数据信息,并返回添加成功后的数据,添加失败反回null
     */
    default Result<T> addAndReturn(T pojo){
        return null;
    }
    /**
     * [ 默认实现 ]
     * 根据数据的编号(ID)删除数据信息
     */
    default Result<Integer> deleteById(Integer id){
        return null;
    }
    /**
     * [ 默认实现 ]
     * 逻辑删除数据,根据数据编号(ID)删除数据信息
     */
    default Result<Integer> logicalDelete(Integer id){
        return null;
    }
    /**
     * [ 默认实现 ]
     * 根据数据编号(ID),恢复逻辑删除的数据
     * <p>此方法需要权限认证调用设计系统安全</p>
     */
    default Result<Integer> recoverDelete(Integer id){
        return null;
    }
    /**
     * [ 默认实现 ]
     * 修改数据,默认修改所有非空字段,不会修改数据id,根据id进行修改
     */
    default Result<Integer> update(T pojo) {
        return null;
    }
    /**
     * [ 默认实现 ]
     * 修改数据,默认修改所有非空字段,不会修改数据id,根据id进行修改,修改成功后返回修改后的数据
     */
    default Result<T> updateAndReturn(T pojo) {
        return null;
    }
    /**
     * [ 默认实现 ]
     * 查找指定编号的数据
     */
    default Result<T> queryById(Integer id) {
        return null;
    }
    /**
     * [ 默认实现 ]
     * 查找所有数据列表,不包含逻辑删除的数据
     */
    default Result<List<T>> queryList() {
        return null;
    }
    /**
     * [ 默认实现 ]
     * 查找指定条目的数据
     * @param size 查找数据的条目数
     */
    default Result<List<T>> queryLimit(int size) {
        return null;
    }
    /**
     * 查找指定条目的数据
     * @param start 开始位置
     * @param end 结束位置
     */
    default Result<List<T>> queryLimit(int start,int end) {
        return null;
    }
    /**
     * [ 默认实现 ]
     * 查找数据总量
     */
    default Result<Long> queryCount() {
        return null;
    }
    /**
     * [ 默认实现 ]
     * 查找指定页码的分页数据
     * @param page 页码
     * @param size 每页数据条目数
     */
    default Result<Page<T>> queryPage(int page, int size) {
        return null;
    }
    /**
     * [ 默认实现 ]
     * 查找本年指定月份的分页数据
     * @param page 页码
     * @param size 每页数据条目数
     * @param month 指定月份
     */
    default Result<Page<T>> queryPage(int page, int size, int month) {
        return null;
    }
    /**
     * [ 默认实现 ]
     * 查找指定年份月份的分页数据
     * @param page 页码
     * @param size 每页数据条目数
     * @param year 指定年份
     * @param month 指定月份
     */
    default Result<Page<T>> queryPage(int page, int size, int year,int month) {
        return null;
    }
}
